package com.project.mapper;

import com.project.bean.CutPageBean;
import com.project.bean.StudentBean;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;

public interface IStudentMapper {
    /**
     * 添加学生
     * @param student 学生对象
     */
    public void add(StudentBean student);

    /**
     * 按编号删除
     * @param id 编号
     */
    public void del(Integer id);

    /**
     * 按id修改电话
     * @param id 编号
     * @param phone 新电话
     */
    public void update(@Param("id") Integer id,@Param("phone") String phone);

    /**
     * 查询所有学生
     * @return 学生集合
     */
    public List<StudentBean> findAll();

    /**
     * 按ID查询学生
     * @param id 学生编号
     * @return 学生对象
     */
    public StudentBean findById(Integer id);

    /**
     * 按姓名模糊查询学生
     * @param name 学生姓名
     * @return 学生集合
     */
    public List<StudentBean> findByName(String name);
    /**
     * 按生日时间段查询学生
     * @param startDate 生日起始日期
     * @param endDate 生日结束日期
     * @return 学生集合
     */
    public List<StudentBean> findByBirthday(@Param("startDate") LocalDate startDate,
                                            @Param("endDate") LocalDate endDate);

    /**
     * 动态条件查询
     * @param name 姓名
     * @param startDate 生日起始日期
     * @param endDate 生日结束日期
     * @return 学生集合
     */
    public List<StudentBean> findByItem(@Param("name") String name,
                                        @Param("startDate") LocalDate startDate,
                                        @Param("endDate") LocalDate endDate);

    /**
     * 查询当前页数据
     * @param start 起始记录数
     * @param pageSize 每页显示记录数
     * @return 学生集合
     */
    public List<StudentBean> cutByList(@Param("start") int start,
                                       @Param("pageSize") int pageSize);

    /**
     * 得到数据库表中的总记录
     * @return 总记录数
     */
    public int getTotal();

    /**
     * 动态条件分页查询当前页的数据
     * @param start 起始记录数
     * @param pageSize 每页显示记录数
     * @param name 姓名
     * @param startDate 生日起始日期
     * @param endDate 生日结束日期
     * @return 当前页数据
     */
    public List<StudentBean> cutByItemList(@Param("start") int start,
             @Param("pageSize") int pageSize, @Param("name") String name,
              @Param("startDate") LocalDate startDate,@Param("endDate") LocalDate endDate);

    /**
     * 动态条件分页查询总记录数
     * @param name 姓名
     * @param startDate 生日起始日期
     * @param endDate 生日结束日期
     * @return 总记录数
     */
    public int cutByItemCount(@Param("name") String name,
                            @Param("startDate") LocalDate startDate,
                              @Param("endDate") LocalDate endDate);

    /**
     * 批量添加学生
     * @param list 学生集合
     */
    public void addList(@Param("list") List<StudentBean> list);

    /**
     * 批量删除学生
     * @param idArray 学生ID数组
     */
    public void delArray(@Param("idArray") int[] idArray);
}
